#ifndef _PARSE_H
#define _PARSE_H

#define SUCCESS 0
#define FAILURE 1
// Maximum expression size.
#define MAX_SIZE  1024
// Maximum identifier name length.
#define MAX_STRING_LEN   50

class Parser
{
	private:
		vector <string *> parsedOutput;
		string output;
		int lookahead;
		int entryIndex;
		bool parseError;
		Lexer lexer;
		string error;
	public:
		Parser();
		Parser(const char *newInput);
		void setInput(const char *newInput);
		const char* getOutput(void);
		int parse(void);
		void emit(int token, int index);
		int getParsedOutputCount(void);
		const char * getParsedOutputAtIndex(int index);
    void ResetError(void);		
    void SetError(int expected, int got);
    const char *GetError(void);
		// Language specfic functions
		bool S(void);
		bool T(void);
		bool U(void);
		bool V(void);
		bool match(int token);
};
#endif
